import Rte from '..'

export type RteCommandProperties = readonly [
  /****************************************************** 段落 ******************************************************/
  'h1',
  'h2',
  'h3',
  'h4',
  'h5',
  'h6',
  'p',
  'quote',

  /** 正向首行缩进 */
  'indent',

  /** 逆向首行缩进 */
  'unindent',

  /** 正向段落缩进 */
  'retract',

  /** 逆向段落缩进 */
  'unretract',

  /** 行高 */
  'lineHeight',

  /** 文字左对齐 */
  'alignLeft',

  /** 文字居中对齐 */
  'alignCenter',

  /** 文字右对齐 */
  'alignRight',

  /** 文字两端对齐 */
  'alignJustify',

  /****************************************************** 文字 ******************************************************/
  'font',
  'bold',
  'italic',
  'underline',
  'through',
  'sub',
  'sup',
  'code',
  'color',
  'bgcolor',
  'size',
  'link',
  'unlink',
  'openLink',
  'brush',
  'search',
  'replace',

  /****************************************************** 列表 ******************************************************/
  'ul',
  'ol',
  'todo',

  /****************************************************** 块儿 ******************************************************/
  'floatLeft',
  'floatRight',
  'delete',

  /****************************************************** 多媒体 ******************************************************/
  'image',
  'networkImage',
  'audio',
  'video',
  'album',

  /****************************************************** Rte ******************************************************/
  'fullscreen',
  'cancelscreen',
  'revoke',
  'resotre',
  'config'
]

export type RteCommandOptionMap<T> = {
  [K in RteCommandProperties extends ArrayLike<infer U> ? U : never]: T
}

export type RteCommandProp = RteCommandProperties extends ArrayLike<infer U> ? U : never

export type RteCommandCallbackArg = string | number | boolean

export type RteCommandCallback = (this: Rte, value?: RteCommandCallbackArg) => void
